package rmiteste;

import gui.janelaCliente;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;
import java.net.MalformedURLException;
import java.rmi.RMISecurityManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Cliente {

    private static janelaCliente janela;
    private static String login;
    private static String servidor;
    private static int meuid;
    private static Interfaces m;

    public static void main(String args[]) {
        setMeuid(-1);
        setJanela(new janelaCliente());
        getJanela().show();
    }

    /**
     * @return the meuid
     */
    public static int getMeuid() {
        return meuid;
    }

    /**
     * @param aMeuid the meuid to set
     */
    public static void setMeuid(int aMeuid) {
        meuid = aMeuid;
    }

    public static void registrar() {
        /*
         * A primeira coisa que o método main deve fazer é instalar um SecurityManager
         * também com o intuito de proteger os recursos da máquina local.
         */

        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }

        try {
            /*
             * Procura um objeto remoto pelo nome, e recebe a referencia do objeto remoto
             */
            m = ((Interfaces) Naming.lookup("rmi://" + getServidor() + "/MensageiroService"));

            setMeuid(getM().registrar(getLogin()));
            if (getMeuid() < 0) {
                getJanela().addtexto("Não foi possível registrar. Número máximo de clientes atingido");
            }
            getJanela().addtexto(getM().lerMensagem(getMeuid()));
//            m.enviarMensagem(meuid, "Olá Servidor!");

//            getJanela().setmodel(getM().uruarios());
            atualiza();


        } catch (MalformedURLException e) {
            System.out.println();
            System.out.println("MalformedURLException: " + e.toString());
        } catch (RemoteException e) {
            System.out.println();
            System.out.println("RemoteException: " + e.toString());
        } catch (NotBoundException e) {
            System.out.println();
            System.out.println("NotBoundException: " + e.toString());
        } catch (Exception e) {
            System.out.println();
            System.out.println("Exception: " + e.toString());
        }
    }

    /**
     * @return the janela
     */
    public static janelaCliente getJanela() {
        return janela;
    }

    /**
     * @param aJanela the janela to set
     */
    public static void setJanela(janelaCliente aJanela) {
        janela = aJanela;
    }

    /**
     * @return the login
     */
    public static String getLogin() {
        return login;
    }

    /**
     * @param aLogin the login to set
     */
    public static void setLogin(String aLogin) {
        login = aLogin;
    }

    /**
     * @return the servidor
     */
    public static String getServidor() {
        return servidor;
    }

    /**
     * @param aServidor the servidor to set
     */
    public static void setServidor(String aServidor) {
        servidor = aServidor;
    }

    /**
     * @return the m
     */
    public static Interfaces getM() {
        return m;
    }

    /**
     * @param m the m to set
     */
    public void setM(Interfaces m) {
        this.m = m;
    }

    public static void atualiza() {
        try {
            getM().lerMensagens(getMeuid());
            int[] selct = getJanela().getJList1().getSelectedIndices();
            getJanela().setmodel(getM().uruarios());
            getJanela().getJList1().setSelectedIndices(selct);
        } catch (RemoteException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }


    }
}
